namespace ScrumSprintMonitor.ConfigEditor.Views.SprintConfigurationEditorView
{
	#region #using Directives

	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Windows.Input;

	#endregion

	public interface ISprintConfigurationEditorViewModel
	{
		ICollection<string> AvailableTfsProjects { get; }
		bool FetchingAvailableTfsProjects { get; }
		ICollection<string> AvailableTfsProcessTemplates { get; }
		ICollection<string> IterationPaths { get; }
		bool FetchingIterationPaths { get; }
		bool FetchingBuildDefinitions { get; }
		ICollection<TimeZoneInfo> TimeZones { get; }

		string TfsProjectName { get; set; }
		string TfsProcessTemplateName { get; set; }
		string CurrentIterationPath { get; set; }
		IBuildDefinitionItemViewModel[] BuildDefinitionStates { get; }

		DateTime? SprintStartDate { get; set; }
		TimeSpan SprintStartTimeOfDay { get; set; }
		TimeZoneInfo SprintStartTimeZone { get; set; }
		DateTime? SprintEndDate { get; set; }
		TimeSpan SprintEndTimeOfDay { get; set; }
		TimeZoneInfo SprintEndTimeZone { get; set; }
		ICommand AdvanceSprintCommand { get; }
		bool ExcludeWeekends { get; }

		bool IsReadOnly { get; }

		ICommand OkCommand { get; }
		ICommand CancelCommand { get; }
		ICommand HelpCommand { get; }

		void ChangeServer(string serverName);
		void Save();
	}

	public interface IBuildDefinitionItemViewModel : INotifyPropertyChanged
	{
		string Name { get; }
		bool IsEnabled { get; set; }
	}
}